# -*- coding: utf-8 -*-
"""
数据模型定义
定义视频文件信息的数据结构
"""
from dataclasses import dataclass
from enum import Enum
from typing import Optional


class VideoType(Enum):
    """视频类型枚举"""
    FC2 = "fc2"
    CENSORED = "censored"  # 有码
    UNCENSORED = "uncensored"  # 无码
    UNKNOWN = "unknown"  # 未知类型


class VideoSubType(Enum):
    """无码视频子类型"""
    NUMERIC = "numeric"  # 纯数字格式
    PREFIX = "prefix"    # 特殊前缀格式


@dataclass
class VideoInfo:
    """视频文件信息数据类"""
    
    # 原始文件名（含扩展名）
    original_filename: str
    
    # 文件类型
    video_type: VideoType
    
    # 核心番号（用于重复判定的关键标识）
    core_id: str
    
    # 详细组件
    prefix: Optional[str] = None      # 前缀部分（如FC2、ABF、SKYHD等）
    number: Optional[str] = None      # 数字部分
    extension: str = ""               # 文件扩展名
    
    # 特殊标识
    has_subtitle: bool = False        # 是否有字幕（-C）
    segment_number: Optional[str] = None  # 分段号（CD1、CD2等）
    has_leak: bool = False           # 是否内部流出
    has_4k: bool = False              # 是否4K版本
    segment_count: int = 1            # 分段数量 (用于数据库整合)
    
    # 额外信息
    video_subtype: Optional[VideoSubType] = None  # 无码子类型
    suffix_parts: list = None        # 其他后缀部分
    is_dirty: bool = False           # 是否为脏数据
    error_reason: Optional[str] = None  # 错误原因
    
    def __post_init__(self):
        if self.suffix_parts is None:
            self.suffix_parts = []
    
    @property
    def clean_core_id(self) -> str:
        """获取清理后的核心番号（用于重复判定）"""
        # if self.video_type == VideoType.FC2:
        #     return f"FC2-{self.number}"
        # elif self.video_type == VideoType.CENSORED:
        #     return f"{self.prefix}-{self.number}"
        # elif self.video_type == VideoType.UNCENSORED:
        #     if self.video_subtype == VideoSubType.NUMERIC:
        #         return f"{self.prefix}-{self.number}"  # prefix存储第一个数字，number存储第二个数字
        #     else:
        #         return f"{self.prefix}-{self.number}"
        return self.core_id
    
    @property
    def is_segment(self) -> bool:
        """是否为分段文件"""
        return self.segment_number is not None
    
    def __str__(self) -> str:
        return f"VideoInfo({self.original_filename} -> {self.clean_core_id})"
    
    def __repr__(self) -> str:
        return self.__str__()